package avicit.cbb.businessclass.system.dataauth.service;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import avicit.cbb.businessclass.system.dataauth.domain.CbbAuthResource;
import avicit.platform6.core.exception.DaoException;

/**
 * <p>金航数码科技有限责任公司</p>
 * <p>作者：熊鸳鸯</p>
 * <p>邮箱：</p>
 * <p>创建时间：  </p>
 * <p>类说明：高级扩展权限服务接口
 * <p>修改记录：张坚 2014-11-25：用于LANTOP系统资源权限管理模块使用 </p>
 */
public interface BaseExtendAuthService {

	// 权限来源标识【来自于权限资源表】
	public static final String SOURCE_SRC_CBB_AUTH = "fromDefault";
	// 权限来源标识【来自于权限资源定制表】
	public static final String SOURCE_SRC_CUSTOM = "fromCustom";

	// 默认的权限资源表
	public static final String DEFAULT_AUTH_TABLE = "CBB_AUTH_RESOURCE";

	/**
	 * 获得此扩展权限的ID标识，区别于别的扩展权限
	 * @return
	 */
	public String getServiceId();

	/**
	 * 高级扩展权限的标题，主要让人看的
	 * @return
	 */
	public String getServiceTitle();

	/**
	 * 获得分类树
	 * @param level 树的打开层级
	 * @return
	 */
	public LinkedHashMap<String, Map<String, Object>> getAuthType(int level);

	/**
	 * 获取资源注册表名
	 * @author ruyc 
	 * @return String
	 */
	public String getResourceTableName();

	/**
	 * 获取权限服务的操作类型
	 * @author ruyc 
	 * @return Map<String,String>
	 */
	public Map<String, String> getOperateInfo();

	/**
	 * 根据资源ID获取操作对应的操作权限
	 * @author ruyc 
	 * @param resourceId	资源ID
	 * @return Map<String,Boolean>	key为操作编码，value为该操作对应的权限
	 */
	public Map<String, Boolean> getAuthOperate(String resourceId);

	/**
	 * 根据资源ID获取数据权限
	 * @author ruyc 
	 * @param resourceId	资源ID
	 * @return String	where条件语句
	 */
	public String getAuthData(String resourceId);

	/**
	 * 根据资源ID获取数据权限配置
	 * @author ruyc 
	 * @param resourceId	资源ID
	 * @param sysId  系统标示Id
	 * @return Clob	数据权限页面配置
	 */
	public String getAuthDataConfig(String resourceId, String sysId);

	/**
	 * 获取属性信息
	 * @author ruyc 
	 * @return Map<String,String>
	 */
	public Map<String, Map<String, Map<String, String>>> getAttributeInfo();

	/**
	 * 注册资源的方法
	 * @author xiongyy 2014-10-21
	 * @param 资源的对象
	 */
	public void insertAuthCbb(CbbAuthResource cbbAuthResource);

	/**
	 * 点击保存按钮（保存where sql 和  数据权限配置）
	 * @author xiongyy 2014-10-22
	 * resourseId 资源id,htmlScript 数据权限配置,sql where语句, 
	 */
	public void insertAuthData(String resourseId, String htmlScript, String sql, String serverId);

	/**
	 * 修改操作类型和操作权限的状态
	 */
	public void updateType(Map<String, String[]> parmam, String targetId, String type);

	/**
	 * 资源的修改
	 * @param cbbAuthResource
	 */
	public void saveCbb(CbbAuthResource[] inserts, String sysId) throws DaoException;

	/**
	 * 资源的删除
	 * @param ids 资源id
	 * @param sysId 标示id
	 */
	public void deleteCbbResourseById(String[] ids, String sysId);

	/**
	 * 编码的唯一性校验
	 * @param cbbAuthResource
	 * @return
	 */
	public boolean isExitCbbCode(CbbAuthResource cbbAuthResource);

	/* 张坚修改内容 2014-11-25：begin */

	/**
	 * 删除资源配置信息
	 * @author 张坚 
	 * @param orgId 组织ID
	 * @param sysId 系统标识ID
	 * @param targetId 角色ID
	 * @param serviceId 服务ID
	 * @param menuId 菜单ID
	 */
	public void deleteCbbAuthResource(String orgId, String sysId, String targetId, String serviceId, String menuId) throws Exception;

	/**
	 * 保存资源配置信息
	 * @author 张坚 
	 * @param cbbAuthResource 资源对象
	 */
	public void insertCbbAuthResource(CbbAuthResource cbbAuthResource) throws Exception;

	/**
	 * 获取资源操作权限
	 * @author 张坚 
	 * @param orgId 组织ID
	 * @param sysId 系统标识ID
	 * @param targetId 授权维度ID
	 * @param serviceId 服务ID
	 * @param code 资源编码，菜单ID
	 * @param actionType 操作类型
	 * @return String
	 */
	public String getResourceOperateAuth(String orgId, String sysId, String targetId, String serviceId, String code, String actionType);

	/**
	 * 删除资源配置信息
	 * @author 张坚 
	 * @param orgId 组织ID
	 * @param sysId 系统标识ID
	 * @param targetType 授权维度ID
	 * @param targetId	授权维度下所选用户ID
	 * @param authServiceId 服务ID
	 * @param code	资源编码（主页面所选节点ID+所选数据表ID）
	 * @param actionType 权限类型
	 * @throws Exception void
	 */
	public void deleteCbbAuthResource(String orgId, String sysId, String targetType, String targetId, String authServiceId, String code, String actionType) throws Exception;

	/**
	 * 加载资源配置信息
	 * @author 张坚 
	 * @param orgId 组织ID
	 * @param sysId 系统标识ID
	 * @param targetType 授权维度ID
	 * @param targetId	授权维度下所选用户ID
	 * @param authServiceId 服务ID
	 * @param code	资源编码
	 * @param actionType 权限类型
	 * @return CbbAuthResource
	 */
	public CbbAuthResource getCbbAuthResource(String orgId, String sysId, String targetType, String targetId, String authServiceId, String code, String actionType);

	/**
	 * 更新资源配置信息
	 * @author 张坚 
	 * @param cbbAuthResource
	 * @throws Exception void
	 */
	public void updateCbbAuthResource(CbbAuthResource cbbAuthResource) throws Exception;

	/**
	 * 删除权限资源信息
	 * @author 张坚 
	 * @param ids 格式：'id1','id2'
	 * @throws Exception void
	 */
	public void delCbbAuthResourceById(String ids) throws Exception;

	/**
	 * 用户是否为初始化用户：没有对权限进行过操作
	 * @author 张坚 
	 * @param orgId
	 * @param sysId
	 * @param targetType
	 * @param targetId
	 * @param authServiceId
	 * @return boolean
	 */
	public boolean isInitUser(String orgId, String sysId, String targetType, String targetId, String authServiceId);

	/**
	 * 删除用户权限设置
	 * @author 张坚 
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param targetType
	 * @param targetId
	 * @throws Exception
	 */
	public void delCbbAuthResource(String orgId, String deptId, String sysId, String targetType, String targetId, String code) throws Exception;

	/**
	 * 删除用户权限设置
	 * @author 张坚 
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param targetId
	 * @throws Exception void
	 */
	public void delCbbAuthResource(String orgId, String deptId, String sysId, String targetId) throws Exception;

	/**
	 * 获取用户权限设置
	 * @author 张坚 
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param targetId
	 * @return List<CbbAuthResource>
	 */
	public List<CbbAuthResource> getCbbAuthResource(String orgId, String deptId, String sysId, String targetId);

	/* 张坚修改内容：end */

}
